package model

import (
	"gorm.io/gorm"
	"micro-chat/config"
	"time"
)

type SmsVerify struct {
	Id         uint32         `gorm:"column:id;type:int UNSIGNED;primaryKey;not null;" json:"id"`
	Phone      string         `gorm:"column:phone;type:char(11);comment:手机号;not null;" json:"phone"`                                              // 手机号
	Code       string         `gorm:"column:code;type:char(6);comment:验证码;not null;" json:"code"`                                                 // 验证码
	SendCount  int32          `gorm:"column:send_count;type:int;comment:发送次数;not null;" json:"send_count"`                                        // 发送次数
	ExpireTime time.Time      `gorm:"column:expire_time;type:datetime(3);comment:过期时间;not null;default:CURRENT_TIMESTAMP(3);" json:"expire_time"` // 过期时间
	Status     int8           `gorm:"column:status;type:tinyint;comment:使用状态: 0:未使用 1:已使用;not null;default:1;" json:"status"`                     // 使用状态: 0:未使用 1:已使用
	CreatedAt  time.Time      `gorm:"column:created_at;type:datetime(3);comment:发送时间;not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"`   // 发送时间
	UpdatedAt  time.Time      `gorm:"column:updated_at;type:datetime(3);comment:更新时间;not null;default:CURRENT_TIMESTAMP(3);" json:"updated_at"`   // 更新时间
	DeletedAt  gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
}

func (v *SmsVerify) TableName() string {
	return "sms_verify"
}

// 校验
func (v *SmsVerify) FindPhone() error {
	return config.DB.Where("phone = ?", v.Phone).Find(&v).Error
}

// 短信
func (v *SmsVerify) AddSms() error {
	return config.DB.Create(&v).Error
}

// 重新发送
func (v *SmsVerify) UpdateSms() error {
	return config.DB.Updates(&v).Error
}

// 销毁
func (v *SmsVerify) Delete(sms string) error {
	return config.DB.Where("sms = ?", sms).Delete(&v).Error
}
